<?php

namespace common\components\office;

use Yii;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use common\helpers\FileHelper;

/**
 * Description of newPHPClass
 *
 * @author emhome
 * @since 2.0
 */
class Excel_1 extends \yii\base\Component {

    public $data;
    public $columns;
    public $filename;
    public $template;
    private $_spreadSheet;

    public function getSpreadSheet() {
        return $this->_spreadSheet;
    }

    // 实例化 Spreadsheet 对象
    public function createSpreadSheet() {
        $this->_spreadSheet = Yii::createObject(Spreadsheet::class);
    }

    public function getSheet() {
        // 实例化 Spreadsheet 对象
        $spreadsheet = $this->getSpreadSheet();
        return $spreadsheet->getActiveSheet();
    }

    public function dumpSheet() {
        $sheet = $this->getSheet();
        $sheet->setTitle('标题'); //设置标题
        // 2获取单元格
        $cell = $sheet->getCell('A1');   //方法1
        $cell = $sheet->getCellByColumnAndRow(1, 1); //方法2
        // 3给单元格赋值
        $cell->setValue('A1单元格内容');


        $cell3 = $sheet->getCellByColumnAndRow(3, 1); //方法2
        $cell3->setValue('合并单元格');
        $sheet->mergeCellsByColumnAndRow(3, 1, 3, 3);
        // 3-1获取设置单元格，链式操作
        $sheet->getCell('A3')->setValue('郭靖');
        $sheet->getCellByColumnAndRow(1, 4)->setValue('杨康');
//序号	姓名	总共数(工)	总共钱(元)	借支(元)	已结工钱(元)	统计一(总工钱-借支)	统计二（总工钱-借支-已给工钱）
//1	李尖尖	3.5	1750	0	0	1750	1750
//2	Stone	3	1500	0	0	1500	1500
//3	孟泽提	3.5	700	83	30	617	587
//4	张华	4	600	0	0	600	600
//5	杨铭万	3	600	0	0	600	600
//6	罗磊	4	600	300	0	300	300
//合计：		21	5750	383	30	5367	5337
//
//        $beginIndex = 10;
//        foreach ($data as $i => $item) {
//            $row = $item->toArray();
//            $rowIndex = $i + $beginIndex;
//            $colIndex = 0;
//            foreach ($row as $col => $vls) {
//                $colIndex++;
//                $cell = $sheet->getCellByColumnAndRow($colIndex, $rowIndex);
//                if ($col == 'index') {
//                    $vls = $colIndex;
//                }
//                $cell->setValue($vls);
//            }
//        }
//
//        // 3-2获取单元格
//        $cellA = $sheet->getCell('A1');
//        echo '值: ', $cellA->getValue(), PHP_EOL;
//        echo '坐标: ', $cellA->getCoordinate();   //获取单元格坐标
//        // 4  Xlsx类 将电子表格保存到文件
    }

    public function init() {
        $this->createSpreadSheet();
        $this->dumpSheet();
    }

    public function getSavePath() {
        $path = Yii::getAlias('@runtime') . '/download/excel/';
        FileHelper::createDirectory($path);
        return $path . date('ymd') . '.xlsx';
    }

    public function export() {
        $spreadsheet = $this->getSpreadSheet();
        $writer = new Xlsx($spreadsheet);
        $file = $this->getSavePath();
        $writer->save($file);
        return Yii::$app->response->sendFile($file, date('Y年m月d日') . '-物xxxx流公司对照表.xlsx');
    }

    public function other() {
        // 单元格强化
        /**
         * 参数说明
         * 设置单元格
         * setCellValue(参数1,参数2)
         * 参数1：单元格位置
         * 参数2：单元格的值
         * setCellValueByColumnAndRow(参数1,参数2,参数3)
         * 参数1：列位置
         * 参数2：行位置
         * 参数3：单元格的值
         */
        $sheet->setCellValue('A1', 'ID');
        $sheet->setCellValue('B1', '姓名');
        $sheet->setCellValue('C1', '年龄');
        $sheet->setCellValue('D1', '身高');

        $sheet->setCellValueByColumnAndRow(1, 2, 1);
        $sheet->setCellValueByColumnAndRow(2, 2, '李雷');
        $sheet->setCellValueByColumnAndRow(3, 2, '18岁');
        $sheet->setCellValueByColumnAndRow(4, 2, '188cm');

        $sheet->setCellValueByColumnAndRow(1, 3, 2);
        $sheet->setCellValueByColumnAndRow(2, 3, '韩梅梅');
        $sheet->setCellValueByColumnAndRow(3, 3, '17岁');
        $sheet->setCellValueByColumnAndRow(4, 3, '165cm');

        /**
         * 单元格文字样式设置
         */
        //	getStyle 获取单元格样式
        //	getFont 获取单元格文字样式
        //	setBold 设置文字粗细
        //	setName 设置文字字体
        //	setSize 设置文字大小

        $sheet->getStyle('B2')->getFont()->setBold(true)->setName('宋体')->setSize(20);

        /**
         * 单元格文字颜色
         */
        // getColor 获取坐标颜色
        // setRGB设置字体颜色
        // getRGB 获取字体颜色
        // setARGB 设置字体颜色
        // getARGB 获取字体颜色
        $sheet->getStyle('B2')->getFont()->getColor()->setRGB('#AEEEEE');
        $sheet->getStyle('B3')->getFont()->getColor()->setARGB('FFFF0000');

        /**
         * 单元格格式
         */
        $sheet->setCellValue('A1', '2019-10-10 10:10:10');
        $sheet->setCellValue('A2', '2019-10-10 10:10:10');
        $sheet->getStyle('A2')->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDD2);
    }

    public function save() {
        $writer = new Xlsx($spreadsheet);
        $writer->save('1.xlsx');
    }

}
